package com.example.demo.Controller;


import com.example.demo.Dao.PersonRepository;
import com.example.demo.Dao.RecordRepository;
import com.example.demo.Entity.Person;
import com.example.demo.Entity.Record;
import com.example.demo.Utils.CodeUtils;
import com.example.demo.Utils.ConstUtils;
import com.example.demo.Utils.CosUtils;
import com.example.demo.Utils.JavaWebTokenUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * UserController
 *
 * 前提: 完成数据库表的编辑，与JPA数据管理
 *
 * 此处用来编辑用户的api接口
 *
 *
 *
 * 用户获取个人信息，并生成二维码返回[用于用户端出示二维码]
 * 二维码包含信息
 * （
 *  头像URL（String），
 *  姓名 （String）,
 *  身份证 (String) 长度限制13位,
 *  家庭地址  （String），
 *  出入次数 （Int）
 *  ）
 *
 *
 *
 * 记得将自己写的方法的详细内容写在文档中，文件命名：编辑人-模块.doc
 * @blame 吴经纶
 */
@RestController
@RequestMapping("/api/user")
@CrossOrigin
@Api("用户api接口")
public class UserController {
    @Resource
    RecordRepository recordRepository;
    @Resource
    PersonRepository personRepository;
    @GetMapping("/record")
    public CodeUtils.Message getUserRecord(HttpServletRequest request){
        try {
            String token  =  request.getHeader(ConstUtils.TokenUtils.TOKEN_HEADERS);
            token = token.replace(ConstUtils.TokenUtils.TOKEN_PREFIX, "");
            String userName = JavaWebTokenUtils.getUsernameFromToken(token);
            Person p = personRepository.findByUsername(userName);
            List<Record> records = recordRepository.findAllByUserName(p.getRealName());
            return CodeUtils.Message.builder().code(20000).message(CodeUtils.Message.encodeMessageToToString(records)).build();
        }catch (Exception e)
        {
            return CodeUtils.Message.builder().code(55044).message("服务器发生未知错误").build();
        }
    }
    @GetMapping("/recordnum")
    public CodeUtils.Message countUserRecord(HttpServletRequest request){
        try {
            String token  =  request.getHeader(ConstUtils.TokenUtils.TOKEN_HEADERS);
            token = token.replace(ConstUtils.TokenUtils.TOKEN_PREFIX, "");
            String userName = JavaWebTokenUtils.getUsernameFromToken(token);
            Person p = personRepository.findByUsername(userName);
            Integer num = recordRepository.countAllByUserName(p.getRealName());
            return CodeUtils.Message.builder().code(20000).message(num.toString()).build();
        }catch (Exception e)
        {
            return CodeUtils.Message.builder().code(55044).message("服务器发生未知错误").build();
        }
    }
    @GetMapping("/sevendaytemperature")
    public CodeUtils.Message getTemperatureAndDay(HttpServletRequest request)
    {
        try {
            String token  =  request.getHeader(ConstUtils.TokenUtils.TOKEN_HEADERS);
            token = token.replace(ConstUtils.TokenUtils.TOKEN_PREFIX, "");
            String userName = JavaWebTokenUtils.getUsernameFromToken(token);
            Person p = personRepository.findByUsername(userName);
            List<Double> nums = recordRepository.getDayAndTemperature(p.getRealName());
            return CodeUtils.Message.builder().code(20000).message(CodeUtils.Message.encodeMessageToToString(nums)).build();
        }catch (Exception e)
        {
            return CodeUtils.Message.builder().code(55044).message("服务器发生未知错误").build();
        }
    }
    @GetMapping("/highrecord")
    public CodeUtils.Message getHighRecord(HttpServletRequest request){
        try {
            String token  =  request.getHeader(ConstUtils.TokenUtils.TOKEN_HEADERS);
            token = token.replace(ConstUtils.TokenUtils.TOKEN_PREFIX, "");
            String userName = JavaWebTokenUtils.getUsernameFromToken(token);
            Person p = personRepository.findByUsername(userName);
            String name = p.getRealName();
            List<Record> records = recordRepository.findAllByUserNameAndTemperatureGreaterThanEqual(name,38.0);
            return CodeUtils.Message.builder().code(20000).message(CodeUtils.Message.encodeMessageToToString(records)).build();
        }catch (Exception e)
        {
            return CodeUtils.Message.builder().code(55044).message("服务器发生未知错误").build();
        }
    }
}
